core: Add helper functions to convert (checksum, objtype) pair to/from string
authorColin Walters <walters@verbum.org>
Wed, 14 Mar 2012 13:37:00 +0000 (09:37 -0400)
committerColin Walters <walters@verbum.org>
Wed, 14 Mar 2012 13:37:00 +0000 (09:37 -0400)
src/libostree/ostree-core.c
src/libostree/ostree-core.h
src/libostree/ostree-repo.c
src/ostree/ot-builtin-prune.c

index 5f938d1179237d3a2debdb69e1acab645dea224e..263988cfec81f6af868bc1a10088cc2ae37c20d5 100644 (file)
@@ -564,6 +564,26 @@ ostree_object_type_from_string (const char *str)
   return 0;
 }
 
+char *
+ostree_object_to_string (const char *checksum,
+                         OstreeObjectType objtype)
+{
+  return g_strconcat (checksum, ".", ostree_object_type_to_string (objtype), NULL);
+}
+
+void
+ostree_object_from_string (const char *str,
+                           gchar     **out_checksum,
+                           OstreeObjectType *out_objtype)
+{
+  const char *dot;
+
+  dot = strrchr (str, '.');
+  g_assert (dot != NULL);
+  *out_checksum = g_strndup (str, dot - str);
+  *out_objtype = ostree_object_type_from_string (dot + 1);
+}
+
 char *
 ostree_get_relative_object_path (const char *checksum,
                                  OstreeObjectType type)
index e6893c924d7d091c40dc5ac60f087487bb3684c4..a3abb3ffdad2d1901c87edd9128928ad6c2f27fa 100644 (file)
@@ -108,6 +108,13 @@ const char * ostree_object_type_to_string (OstreeObjectType objtype);
 
 OstreeObjectType ostree_object_type_from_string (const char *str);
 
+char * ostree_object_to_string (const char *checksum,
+                                OstreeObjectType objtype);
+
+void ostree_object_from_string (const char *str,
+                                gchar     **out_checksum,
+                                OstreeObjectType *out_objtype);
+
 char *ostree_get_relative_object_path (const char        *checksum,
                                        OstreeObjectType   type);
 
index 05ebbc4abc494d77b2b8581a501fd18e7bd84fca..4c99d88cb761cf4d899b11b528ba225fb1d0e545 100644 (file)
@@ -752,13 +752,6 @@ ostree_repo_get_file_object_path (OstreeRepo   *self,
   return ostree_repo_get_object_path (self, checksum, get_objtype_for_repo_file (self));
 }
 
-static char *
-create_checksum_and_objtype (const char *checksum,
-                             OstreeObjectType objtype)
-{
-  return g_strconcat (checksum, ".", ostree_object_type_to_string (objtype), NULL);
-}
-
 static GFile *
 get_pending_object_path (OstreeRepo       *self,
                          const char       *checksum,
@@ -847,7 +840,7 @@ insert_into_transaction (OstreeRepo        *self,
   OstreeRepoPrivate *priv = GET_PRIVATE (self);
   char *key;
 
-  key = create_checksum_and_objtype (checksum, objtype);
+  key = ostree_object_to_string (checksum, objtype);
   /* Takes ownership */
   g_hash_table_replace (priv->pending_transaction, key, NULL);
 }
@@ -1165,22 +1158,15 @@ ostree_repo_commit_transaction (OstreeRepo     *self,
   GHashTableIter iter;
   gpointer key, value;
   char *checksum = NULL;
+  OstreeObjectType objtype;
 
   g_return_val_if_fail (priv->in_transaction == TRUE, FALSE);
 
   g_hash_table_iter_init (&iter, priv->pending_transaction);
   while (g_hash_table_iter_next (&iter, &key, &value))
     {
-      const char *checksum_and_type = key;
-      const char *type_str;
-      OstreeObjectType objtype;
-
-      type_str = strrchr (checksum_and_type, '.');
-      g_assert (type_str);
       g_free (checksum);
-      checksum = g_strndup (checksum_and_type, type_str - checksum_and_type);
-
-      objtype = ostree_object_type_from_string (type_str + 1);
+      ostree_object_from_string ((char*)key, &checksum, &objtype);
 
       g_clear_object (&f);
       f = get_pending_object_path (self, checksum, objtype);
index 30f21c4258a0b31ae88af4f2d49229a51d6ce56f..5090036bd2ad13bbc758774811ad0f3ee9a3e1a5 100644 (file)
@@ -69,13 +69,6 @@ typedef struct {
   guint n_unreachable;
 } OtPruneData;
 
-static char *
-create_checksum_and_objtype (const char *checksum,
-                             OstreeObjectType objtype)
-{
-  return g_strconcat (checksum, ".", ostree_object_type_to_string (objtype), NULL);
-}
-
 static gboolean
 compute_reachable_objects_from_dir_contents (OstreeRepo      *repo,
                                              const char      *sha256,
@@ -93,7 +86,7 @@ compute_reachable_objects_from_dir_contents (OstreeRepo      *repo,
   if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_DIR_TREE, sha256, &tree, error))
     goto out;
 
-  key = create_checksum_and_objtype (sha256, OSTREE_OBJECT_TYPE_DIR_TREE);
+  key = ostree_object_to_string (sha256, OSTREE_OBJECT_TYPE_DIR_TREE);
   g_hash_table_replace (inout_reachable, key, key);
 
   /* PARSE OSTREE_SERIALIZED_TREE_VARIANT */
@@ -107,14 +100,14 @@ compute_reachable_objects_from_dir_contents (OstreeRepo      *repo,
       g_variant_get_child (files_variant, i, "(&s&s)", &filename, &checksum);
       if (ostree_repo_get_mode (repo) == OSTREE_REPO_MODE_BARE)
         {
-          key = create_checksum_and_objtype (checksum, OSTREE_OBJECT_TYPE_RAW_FILE);
+          key = ostree_object_to_string (checksum, OSTREE_OBJECT_TYPE_RAW_FILE);
           g_hash_table_replace (inout_reachable, key, key);
         }
       else
         {
-          key = create_checksum_and_objtype (checksum, OSTREE_OBJECT_TYPE_ARCHIVED_FILE_META);
+          key = ostree_object_to_string (checksum, OSTREE_OBJECT_TYPE_ARCHIVED_FILE_META);
           g_hash_table_replace (inout_reachable, key, key);
-          key = create_checksum_and_objtype (checksum, OSTREE_OBJECT_TYPE_ARCHIVED_FILE_CONTENT);
+          key = ostree_object_to_string (checksum, OSTREE_OBJECT_TYPE_ARCHIVED_FILE_CONTENT);
           g_hash_table_replace (inout_reachable, key, key);
         }
     }
@@ -134,7 +127,7 @@ compute_reachable_objects_from_dir_contents (OstreeRepo      *repo,
                                                         cancellable, error))
         goto out;
 
-      key = create_checksum_and_objtype (meta_checksum, OSTREE_OBJECT_TYPE_DIR_META);
+      key = ostree_object_to_string (meta_checksum, OSTREE_OBJECT_TYPE_DIR_META);
       g_hash_table_replace (inout_reachable, key, key);
     }
 
@@ -166,7 +159,7 @@ compute_reachable_objects_from_commit (OstreeRepo      *repo,
       if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT, sha256, &commit, error))
         goto out;
 
-      key = create_checksum_and_objtype (sha256, OSTREE_OBJECT_TYPE_COMMIT);
+      key = ostree_object_to_string (sha256, OSTREE_OBJECT_TYPE_COMMIT);
       g_hash_table_replace (inout_reachable, key, key);
 
       /* PARSE OSTREE_SERIALIZED_COMMIT_VARIANT */
@@ -184,7 +177,7 @@ compute_reachable_objects_from_commit (OstreeRepo      *repo,
         goto out;
 
       g_variant_get_child (commit, 7, "&s", &meta_checksum);
-      key = create_checksum_and_objtype (meta_checksum, OSTREE_OBJECT_TYPE_DIR_META);
+      key = ostree_object_to_string (meta_checksum, OSTREE_OBJECT_TYPE_DIR_META);
       g_hash_table_replace (inout_reachable, key, key);
     }
 
@@ -205,7 +198,7 @@ object_iter_callback (OstreeRepo    *repo,
   OtPruneData *data = user_data;
   char *key;
 
-  key = create_checksum_and_objtype (checksum, objtype);
+  key = ostree_object_to_string (checksum, objtype);
 
   if (!g_hash_table_lookup_extended (data->reachable, key, NULL, NULL))
     {